﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace KATAJAVI_SIA
{
    public partial class InterfazAdmin : Form
    {
        KATAJAVI call = new KATAJAVI();
        DataClassesDataContext BEDE = new DataClassesDataContext();
        IEnumerable<MARCA_MOTO> lista1;
        IEnumerable<MOTO> lista2;
        IEnumerable<MECANICO> lista3;
        IEnumerable<ATENCION> lista4;
        int valnombre, yaexiste, valrut, yaexisterut, valfono, valnom, valap, valnivel, valpass;

        public InterfazAdmin()
        {
            InitializeComponent();
        }

        private void VacioMarca()
        {
            if (dgv_Marcas.RowCount == 0)
            {
                btn_CargarMarca.Enabled = false;
                btn_EliminarMarca.Enabled = false;
                rad_EditarMarca.Enabled = false;
            }
            if(dgv_Marcas.RowCount != 0)
            {
                btn_CargarMarca.Enabled = true;
                btn_EliminarMarca.Enabled = true;
                rad_EditarMarca.Enabled = true;
            }
        }

        private void VacioMecanico()
        {
            if (dgv_Mecanicos.RowCount == 0)
            {
                btn_CargarMecanico.Enabled = false;
                btn_EliminarMecanico.Enabled = false;
                rad_EditarMecanico.Enabled = false;
            }
            if (dgv_Mecanicos.RowCount != 0)
            {
                btn_CargarMecanico.Enabled = true;
                btn_EliminarMecanico.Enabled = true;
                rad_EditarMecanico.Enabled = true;
            }
        }
        

        private int ComprobarMarcaMotos(int idmarca)  // REVISA SI EXISTEN MOTOS REGISTRADAS DE UNA DETERMINADA MARCA
        {
            lista2 = BEDE.MOTO;
            int uno = 0;
            int cero = 0;
            foreach (MOTO aux in lista2)
            {
                if (aux.id_marca == idmarca)
                {
                    if (aux.softdelete == 1) { uno++; }
                    else { cero++; }
                }
            }
            if (uno != 0) { return 1; }
            else
            {
                if (cero == 0) { return 0; }
                else { return 2; }
            }
        }
        
        private int ComprobarMecanicoAtenciones(int rutmecanico)   // REVISA SI EXISTEN ATENCIONES PENDIENTES DE UN DETERMINADO MECANICO.
        {
            int a = 0; // CUENTA LAS ATENCIONES FINALIZADAS.
            int b = 0; // CUENTA TODAS LAS ATENCIONES DEL MECANICO.
            lista4 = BEDE.ATENCION.Where(c => c.softdelete == 1);
            foreach (ATENCION aux in lista4)
            {
                if (aux.rut_mecanico == rutmecanico)
                {
                    if (aux.estado_atencion == 4)
                    {
                        a++;
                    }
                    b++;
                }
            }
            if (b == 0) { return 2; }          // SU NO ENCUENTRA ATENCIONES PARA EL MECANICO,
            else
            {
                if (a == b) { return 1; }          // SI TODAS LAS ATENCIONES DEL MECANICO HAN SIDO FINALIZADAS, ENTONCES SE PUEDE ELIMINAR AL MECANICO.
                else { return 0; }        // SI EL MENANICO TIENE ATENCIONES PENDIENTES, NO SE LE PUEDE ELIMINAR.
            }
        }


        private void LlenarMarcas()
        {
            lista1 = BEDE.MARCA_MOTO;
            foreach (MARCA_MOTO aux in lista1)
            {
                if (aux.id_marca != 0)
                {
                    dgv_Marcas.Rows.Add(aux.id_marca.ToString(), aux.Nombre);
                }
            }
        }

        private void LlenarMecanicos()
        {
            lista3 = BEDE.MECANICO.Where(a => a.rut_mecanico != 17461175);
            foreach (MECANICO aux in lista3)
            {
                if (aux.softdelete == 1)
                {
                    string nivel = "";
                    if (aux.nivel == 0) { nivel = "MECÁNICO"; }
                    if (aux.nivel == 1) { nivel = "ADMINISTRADOR"; }
                    dgv_Mecanicos.Rows.Add(aux.rut_mecanico.ToString(), aux.Nombre, aux.fono.ToString(), nivel, aux.clave.ToString());
                }
            }
        }

        private void InterfazAdmin_Load(object sender, EventArgs e)
        {
            LlenarMarcas();
            LlenarMecanicos();
            VacioMarca();
            VacioMecanico();
            gbx_mecanicos.Enabled = false;
            dgv_Mecanicos.ClearSelection();
            gbx_marcas.Enabled = false;
            dgv_Marcas.ClearSelection();            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void Limpiar()
        {
            rad_NuevaMarca.Checked = false;
            rad_EditarMarca.Checked = false;
            tbx_IDMarca.Clear();
            tbx_IDMarca.Enabled = false;
            tbx_NombreMarca.Clear();
            tbx_NombreMarca.Enabled = false;
            btn_GuardarMarca.Enabled = false;
            btn_NoGuardarMarca.Enabled = false;
            errorProvider1.Clear();
        }

        private void Limpiar1()
        {
            tbx_RutMecanico.Clear();
            tbx_FonoMecanico.Clear();
            tbx_NombreMecanico1.Clear();
            tbx_NombreMecanico2.Clear();
            cbx_NivelMecanico.SelectedIndex = -1;
            tbx_ClaveMecanico.Clear();
            rad_NuevoMecanico.Checked = true;
        }

        private void btn_GuardarMarca_Click(object sender, EventArgs e)
        {
            try
            {
                if (valnombre == 0)
                {
                    MessageBox.Show("El valor ingresado no es correcto. Por favor,\ncorrijalo y reintente guardar los datos.", "ERROR EN LOS DATOS.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                if (valnombre == 1)
                {
                    if (rad_NuevaMarca.Checked == true)
                    {
                        if (yaexiste == 0)
                        {
                            MARCA_MOTO nueva = new MARCA_MOTO();
                            nueva.id_marca = int.Parse(tbx_IDMarca.Text);
                            nueva.Nombre = tbx_NombreMarca.Text;
                            BEDE.MARCA_MOTO.InsertOnSubmit(nueva);
                            BEDE.SubmitChanges();
                            dgv_Marcas.Rows.Clear();
                            LlenarMarcas();
                            MessageBox.Show("La MARCA se agregó correctamente.", "INFORMACIÓN GUARDADA.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Limpiar();
                        }
                    }
                    if (rad_EditarMarca.Checked == true)
                    {
                        if (yaexiste == 0)
                        {
                            MARCA_MOTO MarcaExistente = (from c in BEDE.MARCA_MOTO where c.id_marca == int.Parse(tbx_IDMarca.Text) select c).First();
                            MarcaExistente.Nombre = tbx_NombreMarca.Text;
                            BEDE.SubmitChanges();
                            dgv_Marcas.Rows.Clear();
                            LlenarMarcas();
                            MessageBox.Show("La MARCA se actualizó correctamete.", "INFORMACIÓN GUARDADA.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Limpiar();
                        }
                    }
                }
            }
            catch { MessageBox.Show("Ha ocurrido un error al intentar guardar la inforación\n del cliente. Por favor, revise los datos e intentelo nuevamente.\n De Persistir el error, se recomienda reiniciar el programa.", "ERROR AL INTENTAR GUARDAR.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
        }

        private void btn_EliminarMarca_Click(object sender, EventArgs e)
        {
            lista1 = BEDE.MARCA_MOTO;
            string idmarca = dgv_Marcas.CurrentRow.Cells[0].Value.ToString();

            if (MessageBox.Show("¿Esta seguro que desea eliminar la MARCA seleccionada?", "ELIMINAR REGISTRO.", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                foreach (MARCA_MOTO aux in lista1)
                {
                    if (aux.id_marca == int.Parse(idmarca)) // SI EL ID ES EL DE LA MARCA QUE DESEAMOS ELIMINAR.
                    {
                        int usemarca = ComprobarMarcaMotos(aux.id_marca);
                        if (usemarca == 1) // EXISTEN MOTOS REGISTRADAS DE LA MARCA QUE SE DESEA ELIMINAR.
                        {
                            if (MessageBox.Show("La MARCA no se ha eliminado aun, pues existen MOTOCICLETAS registradas de la marca en cuestión. Se aconseja no eliminar la marca selecionada, para evitar problemas de funcionamiento del sistema.\n\n¿Desea eliminar la MARCA de todas formas?", "ATENCIÓN.", MessageBoxButtons.OKCancel, MessageBoxIcon.Stop) == DialogResult.OK)
                            {
                                lista2 = BEDE.MOTO;
                                foreach (MOTO aux2 in lista2)
                                {
                                    if (aux2.id_marca == aux.id_marca) { aux2.id_marca = 0; }  // TOMA TODAS LAS MOTOCICLETAS REGISTRADAS CON LA MARCA ASOCIADA, Y LES CAMBIA EL VALOR DE MARCA A "OTRA MARCA".
                                }
                                BEDE.MARCA_MOTO.DeleteOnSubmit(aux);
                                BEDE.SubmitChanges();
                                dgv_Marcas.Rows.Clear();
                                LlenarMarcas();
                                MessageBox.Show("La MARCA fue eliminada de forma exitosa.", "REGISTRO ELIMINADO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        }
                        if (usemarca == 2)
                        {
                            lista2 = BEDE.MOTO;
                            foreach (MOTO aux2 in lista2)
                            {
                                if (aux2.id_marca == aux.id_marca) { aux2.id_marca = 0; }  // TOMA TODAS LAS MOTOCICLETAS REGISTRADAS CON LA MARCA ASOCIADA, Y LES CAMBIA EL VALOR DE MARCA A "OTRA MARCA".
                            }
                            BEDE.MARCA_MOTO.DeleteOnSubmit(aux);
                            BEDE.SubmitChanges();
                            dgv_Marcas.Rows.Clear();
                            LlenarMarcas();
                            MessageBox.Show("La MARCA fue eliminada de forma exitosa.", "REGISTRO ELIMINADO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        if (usemarca == 0) // LA MARCA QUE SE INTENTA ELIMINAR NO SE ESTA USANDO.
                        {
                            BEDE.MARCA_MOTO.DeleteOnSubmit(aux);
                            BEDE.SubmitChanges();
                            dgv_Marcas.Rows.Clear();
                            LlenarMarcas();
                            MessageBox.Show("La MARCA fue eliminada de forma exitosa.", "REGISTRO ELIMINADO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
                Limpiar();
                VacioMarca();
            }
        }

        private void btn_CargarMarca_Click(object sender, EventArgs e)
        {
            lista1 = BEDE.MARCA_MOTO;
            string a = dgv_Marcas.CurrentRow.Cells[0].Value.ToString();
            if (int.Parse(a) == 0)
            {
                MessageBox.Show("La MARCA seleccionada no puede ser editada,  pues es un valor elemental de funcionamiento del sistema.", "NO SE PUEDE EDITAR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            if (int.Parse(a) != 0)
            {
                foreach (MARCA_MOTO aux in lista1)
                {
                    if (aux.id_marca == int.Parse(a))
                    {
                        tbx_IDMarca.Text = aux.id_marca.ToString();
                        tbx_NombreMarca.Text = aux.Nombre.ToString();
                        btn_CargarMarca.Enabled = true;
                        tbx_IDMarca.Enabled = true;
                        tbx_NombreMarca.Enabled = true;
                        btn_NoGuardarMarca.Enabled = true;
                        btn_GuardarMarca.Enabled = true;
                    }
                }
            }
        }

        private void rad_Nueva_CheckedChanged(object sender, EventArgs e)
        {
            gbx_marcas.Enabled = true;
            dgv_Marcas.Enabled = true;
            btn_EliminarMarca.Enabled = false;
            btn_CargarMarca.Enabled = false;
            int i = dgv_Marcas.Rows.Count - 1 ;
            tbx_IDMarca.Enabled = true;
            tbx_NombreMarca.Enabled = true;
            btn_GuardarMarca.Enabled = true;
            btn_NoGuardarMarca.Enabled = true;
            int we = 0;
            int aa = 1;
            lista1 = BEDE.MARCA_MOTO;
            do
            {
                foreach (MARCA_MOTO aux in lista1)
                {
                    if (aux.id_marca == aa) { aa++; }
                    else { we = 1; }
                }
            } while (we == 0);
            tbx_IDMarca.Text = aa.ToString();
            tbx_NombreMarca.Focus();

            gbx_mecanicos.Enabled = false;
            dgv_Mecanicos.ClearSelection();

            errorProvider1.Clear();
        }

        private void rad_editar_CheckedChanged(object sender, EventArgs e)
        {
            gbx_marcas.Enabled = true;
            dgv_Marcas.Enabled = true;
            btn_EliminarMarca.Enabled = true;
            btn_CargarMarca.Enabled = true;
            btn_GuardarMarca.Enabled = false;
            btn_NoGuardarMarca.Enabled = false;
            tbx_IDMarca.Enabled = false;
            tbx_IDMarca.Clear();
            tbx_NombreMarca.Enabled = false;
            tbx_NombreMarca.Clear();

            gbx_mecanicos.Enabled = false;
            dgv_Mecanicos.ClearSelection();

            errorProvider1.Clear();
        }

        private void btn_NoGuardarMarca_Click(object sender, EventArgs e)
        {
            Limpiar();
            rad_NuevaMarca.Checked = true;
        }

        private void rad_NuevoMecanico_CheckedChanged(object sender, EventArgs e)
        {
            gbx_mecanicos.Enabled = true;
            dgv_Mecanicos.Enabled = true;
            btn_CargarMecanico.Enabled = false;
            btn_EliminarMecanico.Enabled = false;
            tbx_RutMecanico.Enabled = true;
            tbx_RutMecanico.Clear();
            tbx_FonoMecanico.Enabled = true;
            tbx_FonoMecanico.Clear();
            tbx_NombreMecanico1.Enabled = true;
            tbx_NombreMecanico1.Clear();
            tbx_NombreMecanico2.Enabled = true;
            tbx_NombreMecanico2.Clear();
            cbx_NivelMecanico.Enabled = true;
            cbx_NivelMecanico.SelectedIndex = -1;
            tbx_ClaveMecanico.Enabled = true;
            tbx_ClaveMecanico.Clear();
            btn_GuardarMecanico.Enabled = true;
            btn_NoGuardarMecanico.Enabled = true;

            gbx_marcas.Enabled = false;
            dgv_Marcas.ClearSelection();

            errorProvider1.Clear();
        }

        private void rad_EditarMecanico_CheckedChanged(object sender, EventArgs e)
        {
            gbx_mecanicos.Enabled = true;
            dgv_Mecanicos.Enabled = true;
            btn_CargarMecanico.Enabled = true;
            btn_EliminarMecanico.Enabled = true;
            tbx_RutMecanico.Enabled = false;
            tbx_FonoMecanico.Enabled = false;
            tbx_NombreMecanico1.Enabled = false;
            tbx_NombreMecanico2.Enabled = false;
            cbx_NivelMecanico.Enabled = false;
            tbx_ClaveMecanico.Enabled = false;
            btn_GuardarMecanico.Enabled = false;
            btn_NoGuardarMecanico.Enabled = false;

            gbx_marcas.Enabled = false;
            dgv_Marcas.ClearSelection();

            errorProvider1.Clear();
        }

        private void btn_EliminarMecanico_Click(object sender, EventArgs e)
        {
            lista3 = BEDE.MECANICO;
            string rutmecanico = dgv_Mecanicos.CurrentRow.Cells[0].Value.ToString();
            if (int.Parse(rutmecanico) != 17461175)
            {
                if (MessageBox.Show("¿Esta seguro que desea eliminar el MECÁNICO seleccionado?.", "EDITAR REGISTRO.", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                {
                    foreach (MECANICO aux in lista3)
                    {
                        if (aux.rut_mecanico == int.Parse(rutmecanico))
                        {
                            int valatenmec = ComprobarMecanicoAtenciones(int.Parse(rutmecanico));
                            if (valatenmec == 0)
                            {
                                MessageBox.Show("El MECÁNICO no se puede eliminar, porque aun registra ATENCIONES pendientes. Para eliminar correctamente al MECÁNICO, procure primero que todas sus atenciones sean finiquitadas. ", "ERROR AL ELIMINAR MECÁNICO.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            if (valatenmec == 1)
                            {
                                if (MessageBox.Show("El MECÁNICO no se ha eliminado aun, pues existen ATENCIONES asociadas al mecánico en cuestión. Se aconseja no eliminar al mecánico señalado, para evitar problemas de funcionamiento del sistema.\n\n¿Desea eliminar el MECÁNICO de todas formas?", "ATENCIÓN.", MessageBoxButtons.OKCancel, MessageBoxIcon.Stop) == DialogResult.OK)
                                {
                                    lista4 = BEDE.ATENCION;
                                    foreach (ATENCION aux2 in lista4)
                                    {
                                        if (aux2.rut_mecanico == aux.rut_mecanico) { aux2.rut_mecanico = 17461175; } // TODAS LAS ATENCIONES SE RECONECTAN A UN MECÁNICO "GENERICO" DEL SISTEMA.
                                    }
                                    BEDE.MECANICO.DeleteOnSubmit(aux);
                                    BEDE.SubmitChanges();
                                    dgv_Mecanicos.Rows.RemoveAt(dgv_Mecanicos.CurrentRow.Index);
                                    MessageBox.Show("El MECÁNICO fue eliminado de forma exitosa.", "SE ELIMINÓ EL MECÁNICO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                            }
                            if (valatenmec == 2)
                            {

                                BEDE.MECANICO.DeleteOnSubmit(aux);
                                BEDE.SubmitChanges();
                                dgv_Mecanicos.Rows.RemoveAt(dgv_Mecanicos.CurrentRow.Index);
                                MessageBox.Show("El MECÁNICO fue eliminado de forma exitosa.", "SE ELIMINÓ EL MECÁNICO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        }
                    }
                }
                Limpiar1();
                VacioMecanico();
            }
        }
        private void btn_CargarMecanico_Click(object sender, EventArgs e)
        {
            lista3 = BEDE.MECANICO;
            string rutmecanico = dgv_Mecanicos.CurrentRow.Cells[0].Value.ToString();
            if (int.Parse(rutmecanico) == 11111111)
            {
                MessageBox.Show("El MECÁNICO seleccionado no puede ser editado,  pues es un valor elemental de funcionamiento del sistema.", "NO SE PUEDE EDITAR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            }
            if (int.Parse(rutmecanico) != 11111111)
            {
                foreach (MECANICO aux in lista3)
                {

                    if (aux.rut_mecanico == int.Parse(rutmecanico))
                    {
                        tbx_RutMecanico.Text = aux.rut_mecanico.ToString();

                        tbx_FonoMecanico.Text = aux.fono.ToString();

                        string[] PartesNombre = aux.Nombre.Split(' ');
                        int a = 1;
                        foreach (string nom in PartesNombre)
                        {
                            if (a == 2) { if (nom.Contains('·')) { tbx_NombreMecanico2.Text = nom.Replace('·', ' '); } else { tbx_NombreMecanico2.Text = nom; } }
                            if (a == 1) { if (nom.Contains('·')) { tbx_NombreMecanico1.Text = nom.Replace('·', ' '); } else { tbx_NombreMecanico1.Text = nom; } a++; }
                        }
                        tbx_ClaveMecanico.Text = aux.clave.ToString();
                        cbx_NivelMecanico.SelectedValue = aux.nivel;

                        tbx_FonoMecanico.Enabled = true;
                        tbx_NombreMecanico1.Enabled = true;
                        tbx_NombreMecanico2.Enabled = true;
                        tbx_ClaveMecanico.Enabled = true;
                        tbx_ClaveMecanico.Enabled = true;
                        cbx_NivelMecanico.Enabled = true;
                        btn_GuardarMecanico.Enabled = true;
                        btn_NoGuardarMecanico.Enabled = true;
                    }
                }
            }
        }

        private void btn_NoGuardarMecanico_Click(object sender, EventArgs e)
        {
            Limpiar1();
        }

        private void btn_GuardarMecanico_Click(object sender, EventArgs e)
        {
            try
            {
                tbx_RutMecanicoDig.Focus();
                tbx_FonoMecanico.Focus();
                tbx_NombreMecanico1.Focus();
                tbx_NombreMecanico2.Focus();
                cbx_NivelMecanico.Focus();
                tbx_ClaveMecanico.Focus();
                tbx_RutMecanico.Focus();

                int valid = valrut * valfono * valnom * valap * valnivel * valpass;
                if (valid == 0)
                {
                    MessageBox.Show("Los datos ingresados no son correctos.\nPor favor revise los campos señalados.", "ERROR EN LOS DATOS", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                if (valid == 1)
                {
                    if (rad_NuevoMecanico.Checked == true)
                    {
                        string nombre;
                        string apellido;
                        if (tbx_NombreMecanico1.Text.Contains(" ")) { nombre = tbx_NombreMecanico1.Text.Replace(' ', '·'); } else { nombre = tbx_NombreMecanico1.Text; }
                        if (tbx_NombreMecanico2.Text.Contains(" ")) { apellido = tbx_NombreMecanico2.Text.Replace(' ', '·'); } else { apellido = tbx_NombreMecanico2.Text; }
                        string nomaux = nombre + " " + apellido;
                        int yaexistenombre = call.BuscarEnGrid(nomaux, dgv_Mecanicos);
                        if (yaexisterut == 1 | yaexistenombre == 1)
                        {
                            if (yaexistenombre == 1) 
                            { 
                                errorProvider1.SetError(tbx_NombreMecanico1, "El nombre ingresado ya esta en los registros. Por favor\nmodifique el nombre o apellido del nuevo mecánico.");
                                errorProvider1.SetError(tbx_NombreMecanico2, "El nombre ingresado ya esta en los registros. Por favor\nmodifique el nombre o apellido del nuevo mecánico.");
                            }
                            MessageBox.Show("Ocurrió un error de duplicidad de datos", "ERROR DE DUPLICIDAD.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                        else
                        {
                            MECANICO nuevo = new MECANICO();
                            nuevo.clave = int.Parse(tbx_ClaveMecanico.Text);
                            nuevo.fono = int.Parse(tbx_FonoMecanico.Text);
                            nuevo.nivel = cbx_NivelMecanico.SelectedIndex;
                            nuevo.Nombre = nomaux;
                            nuevo.rut_mecanico = int.Parse(tbx_RutMecanico.Text);
                            nuevo.softdelete = 1;
                            BEDE.MECANICO.InsertOnSubmit(nuevo);
                            BEDE.SubmitChanges();
                            dgv_Mecanicos.Rows.Clear();
                            LlenarMecanicos();
                            MessageBox.Show("Los datos del nuevo MECÁNICO fueron agregados correctamente al sistema.\n", "NUEVO MECANICO AÑADIDO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Limpiar1();
                            Refresh();
                        }
                    }
                    if (rad_EditarMecanico.Checked == true)
                    {
                        string nombre;
                        string apellido;
                        if (tbx_NombreMecanico1.Text.Contains(" ")) { nombre = tbx_NombreMecanico1.Text.Replace(' ', '·'); } else { nombre = tbx_NombreMecanico1.Text; }
                        if (tbx_NombreMecanico2.Text.Contains(" ")) { apellido = tbx_NombreMecanico2.Text.Replace(' ', '·'); } else { apellido = tbx_NombreMecanico2.Text; }
                        string nomaux = nombre + " " + apellido;
                        int yaexistenombre = call.BuscarEnGrid(nomaux, dgv_Mecanicos);
                        if (yaexistenombre == 1)
                        {
                            errorProvider1.SetError(tbx_NombreMecanico1, "El nombre ingresado ya esta en los registros. Por favor\nmodifique el nombre o apellido del nuevo mecánico.");
                            errorProvider1.SetError(tbx_NombreMecanico2, "El nombre ingresado ya esta en los registros. Por favor\nmodifique el nombre o apellido del nuevo mecánico.");
                            MessageBox.Show("Ha ocurrido un error con los datos ingresados.\nPor favor revise los campos indicados.", "ERROR AL EDITAR.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                        if (yaexistenombre == 0)
                        {
                            MECANICO MecanicoExistente = (from c in BEDE.MECANICO where c.rut_mecanico == int.Parse(tbx_RutMecanico.Text) select c).First();
                            MecanicoExistente.clave = int.Parse(tbx_ClaveMecanico.Text);
                            MecanicoExistente.fono = int.Parse(tbx_FonoMecanico.Text);
                            MecanicoExistente.nivel = cbx_NivelMecanico.SelectedIndex;
                            MecanicoExistente.Nombre = nomaux;
                            BEDE.SubmitChanges();
                            dgv_Mecanicos.Rows.Clear();
                            LlenarMecanicos();
                            MessageBox.Show("Los datos del nuevo MECÁNICO fueron actualizados correctamente.\n", "NUEVO MECANICO AÑADIDO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Limpiar1();
                        }
                    }

                }
            }
            catch { MessageBox.Show("Ha ocurrido un error al intentar guardar la inforación\n del cliente. Por favor, revise los datos e intentelo nuevamente.\n De Persistir el error, se recomienda reiniciar el programa.", "ERROR AL INTENTAR GUARDAR.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
        }

        private void tbx_RutMecanico_TextChanged(object sender, EventArgs e)
        {
            tbx_RutMecanico.Text = tbx_RutMecanico.Text.Trim();
        }

        private void tbx_FonoMecanico_TextChanged(object sender, EventArgs e)
        {
            tbx_FonoMecanico.Text = tbx_FonoMecanico.Text.Trim();
        }

        private void tbx_ClaveMecanico_TextChanged(object sender, EventArgs e)
        {
            tbx_ClaveMecanico.Text = tbx_ClaveMecanico.Text.Trim();
        }

        private void tbx_NombreMarca_Leave(object sender, EventArgs e)
        {
            tbx_NombreMarca.Text = tbx_NombreMarca.Text.Trim();
            valnombre = call.ValidarTextos(tbx_NombreMarca.Text);
            if (valnombre == 0) { errorProvider1.SetError(tbx_NombreMarca, "El nombre asignado a la marca es incorrecto.\n(Solo se permiten caracteres entre A y Z)"); }
            else
            {
                yaexiste = call.BuscarEnGrid(tbx_NombreMarca.Text, dgv_Marcas);
                if (yaexiste == 1) { errorProvider1.SetError(tbx_NombreMarca, "La marca que desea agregar ya se encuentra\nentre los registros del sistema."); }
                else { errorProvider1.SetError(tbx_NombreMarca, ""); }
            }
        }

        private void tbx_RutMecanicoDig_TextChanged(object sender, EventArgs e)
        {
            tbx_RutMecanicoDig.Text = tbx_RutMecanicoDig.Text.Trim();
        }

        private void tbx_RutMecanicoDig_Leave(object sender, EventArgs e)
        {
            valrut = call.ValidarRut(tbx_RutMecanico.Text, tbx_RutMecanicoDig.Text);
            if (valrut == 0) { errorProvider1.SetError(tbx_RutMecanicoDig, "* El RUT no coincide con su digito verificador.\n* El número de RUT solo puede contener caracteres entre 0 y 9.\n* El Digito Verificador solo admite caracteres entre 0 y 9 ademas de la letra K.\n* Ninguno de los campos puede quedar vacíos."); }
            else 
            {
                yaexisterut = call.BuscarEnGrid(tbx_RutMecanico.Text, dgv_Mecanicos);
                if (yaexisterut == 1) { errorProvider1.SetError(tbx_RutMecanicoDig, "El rut que se está ingresando ya\nexiste entre los registros."); }
                else { errorProvider1.SetError(tbx_RutMecanicoDig, ""); }
            }
        }

        private void tbx_FonoMecanico_Leave(object sender, EventArgs e)
        {
            valfono = call.ValidarFono(tbx_FonoMecanico.Text);
            if (valfono == 0) { errorProvider1.SetError(tbx_FonoMecanico, "* Este campo solo puede contener números.\n* Este campo no puede contener menos de 8 digitos.\n* Para Celulares, anteponga 9, 8 o 7 segun corresponda.\n* Para teléfono fijo, anteponga 2.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_FonoMecanico, ""); }
        }

        private void tbx_NombreMecanico1_Leave(object sender, EventArgs e)
        {
            tbx_NombreMecanico1.Text = tbx_NombreMecanico1.Text.Trim();
            valnom = call.ValidarTextos(tbx_NombreMecanico1.Text);
            if (valnom == 0) { errorProvider1.SetError(tbx_NombreMecanico1, "* Este campo solo puede contener caracteres entre A y Z, ademas de Espacios.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_NombreMecanico1, ""); }
        }

        private void tbx_NombreMecanico2_Leave(object sender, EventArgs e)
        {
            tbx_NombreMecanico2.Text = tbx_NombreMecanico2.Text.Trim();
            valap = call.ValidarTextos(tbx_NombreMecanico2.Text);
            if (valap == 0) { errorProvider1.SetError(tbx_NombreMecanico2, "* Este campo solo puede contener caracteres entre A y Z, ademas de Espacios.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_NombreMecanico2, ""); }
        }

        private void cbx_NivelMecanico_Leave(object sender, EventArgs e)
        {
            valnivel = call.ValidarCombobox(cbx_NivelMecanico.Text);
            if (valnivel == 0) { errorProvider1.SetError(cbx_NivelMecanico, "Debe selecionar un nivel jerárquico para el nuevo mánico."); }
            else { errorProvider1.SetError(cbx_NivelMecanico, ""); }
        }

        private void tbx_ClaveMecanico_Leave(object sender, EventArgs e)
        {
            valpass = call.ValidarNumeros(tbx_ClaveMecanico.Text);
            if (valpass == 0) { errorProvider1.SetError(tbx_ClaveMecanico, "* Este campo solo puede contener números.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_ClaveMecanico, ""); }
        }
    }
}
